package xkp.lesson4;

import java.io.*;

public class TestSerial {
    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
        //在面试时会问深拷贝的几种方式
        //1、拷贝构造
        //2、使用克隆
        //以上两种方式，如果稍微不注意容易引起浅拷贝的问题
        Car car = new Car("123");
        Driver driver1 = new Driver(20,"张三",car);
       /* Driver driver2 = (Driver) driver1.clone();
        System.out.println(driver2);
        car.setCarNumber("234");
        System.out.println(driver2);*/
        //3、使用序列化一步到位实现深拷贝
        //使用对象流验证
        //创建针对文件的对象输出流
        ObjectOutputStream outputStream = new ObjectOutputStream(
                new FileOutputStream("Lesson25/file/Driver"));
        //把对象序列化保存在文件中
        outputStream.writeObject(driver1);
        outputStream.flush();
        outputStream.close();

        ObjectInputStream inputStream = new ObjectInputStream(
                new FileInputStream("Lesson25/file/Driver"));

        Driver driver2 = (Driver) inputStream.readObject();
        inputStream.close();
        System.out.println(driver1);
        driver1.getCar().setCarNumber("234");
        System.out.println(driver2);
        //为什么一直，因为driver1与diver2现在没半毛钱关系
        //dirver2是从文件中取到的数据。
        //字节数据是最基本的数据  字节是最小的数据存储单位
        //任何数据都可以转换为字节数据

        //现在问题是如果需要通过序列化实现深拷贝，
        // 上面程序有文件的参与，很麻烦，严重影响效率


        //如果把对文件的操作替换掉，
        // 把文件替换为一块内存区域，可以显著挺高程序性能，并且不会影响程序功能

    }
}
